package org.dtrd.modules.archive.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dtrd.config.system.Constant;
import org.dtrd.modules.archive.entity.bean.laboratory.*;
import org.dtrd.modules.archive.entity.bean.report.LaboratoryReport;
import org.dtrd.modules.archive.entity.po.DtrdEntRdArchiveLaboratory;
import org.dtrd.modules.patient.entity.bean.report.ControllerTargetReport;

import java.util.List;

/**
 * 实验室检查
 *
 * @author 萧
 * @date 2021-10-01 22:47:27
 **/
public interface IDtrdEntRdLaboratoryService extends IBaseArchiveReportService<DtrdEntRdArchiveLaboratory> {

    LaboratoryReport getPatientLaboratoryReport(Integer patientId);

    DtrdEntRdArchiveLaboratory getPatientLaboratory(Integer patientId);

    /**
     * 修改血糖相关
     *
     * @param request
     * @return
     */
    boolean updateSugarRecord(LaboratorySugarDTO request);

    /**
     * ogtt与胰岛功能
     *
     * @param request
     * @return
     */
    boolean updateOgttRecord(LaboratoryOgttDTO request);

    /**
     * 血脂检查
     *
     * @param request
     * @return
     */
    boolean updateLipidRecord(LaboratoryLipidDTO request);

    /**
     * 肝功能
     *
     * @param request
     * @return
     */
    boolean updateLiverRecord(LaboratoryLiverDTO request);

    /**
     * 肾功能
     *
     * @param request
     * @return
     */
    boolean updateKidneyRecord(LaboratoryKidneyDTO request);

    /**
     * 酮体检查
     *
     * @param request
     * @return
     */
    boolean updateKetoneRecord(LaboratoryKetoneDTO request);

    /**
     * 血气分析
     *
     * @param request
     * @return
     */
    boolean updateBloodRecord(LaboratoryBloodDTO request);

    /**
     * 获取周期内的实验室检查的类型的平均检查值
     *
     * @param patientId
     * @param startDate
     * @param endDate
     * @param laboratory
     * @return
     */
    Float getAvgLaboratoryType(Integer patientId, String startDate, String endDate, Constant.LABORATORY laboratory);

    /**
     * 获取周期内的实验室类型
     *
     * @param patientId
     * @param startDate
     * @param endDate
     * @param laboratory 选择查询的类型
     * @return
     */
    List<DtrdEntRdArchiveLaboratory> getPeriodLaboratoryType(Integer patientId, String startDate, String endDate, Constant.LABORATORY laboratory);

    /**
     * 封装获取周期内的实验室检查的类型的平均检查值的方法
     *
     * @param patientId
     * @param startDate
     * @param endDate
     * @param targetReport
     * @param laboratory
     * @return
     */
    ControllerTargetReport getAvgLaboratoryType(Integer patientId, String startDate, String endDate, ControllerTargetReport targetReport, Float controllerValue, Constant.LABORATORY laboratory);

    /**
     * 获取实验室检查的最初的一条记录
     *
     * @param patientId
     * @param laboratory
     * @return
     */
    Float getFirstLaboratoryValue(Integer patientId, Constant.LABORATORY laboratory);
}
